#pragma once

#include "../include/IMessageHandler.h"
#include "../include/MessageProducer.h"
#include <functional>
#include <map>

namespace MessageFramework {

/**
 * @brief API请求类型
 */
enum class APIRequestType {
    QUERY_ACCOUNT,      ///< 查询账户资金
    QUERY_POSITION,     ///< 查询持仓
    QUERY_ORDER,        ///< 查询订单
    PLACE_ORDER,        ///< 下单
    CANCEL_ORDER,       ///< 撤单
    UNKNOWN
};

/**
 * @brief API请求消息体
 */
struct APIRequestBody {
    char requestType[32];       ///< 请求类型
    char userId[32];            ///< 用户ID
    char params[512];           ///< 参数（JSON格式）

    /**
     * @brief 从JSON字符串解析
     */
    static APIRequestBody fromJson(const std::string& json);

    /**
     * @brief 转换为JSON字符串
     */
    std::string toJson() const;

    /**
     * @brief 获取请求类型枚举
     */
    APIRequestType getRequestType() const;
};

/**
 * @brief API响应消息体
 */
struct APIResponseBody {
    int code;                   ///< 响应码（0=成功）
    char message[128];          ///< 响应消息
    char data[2048];            ///< 响应数据（JSON格式）

    /**
     * @brief 从JSON字符串解析
     */
    static APIResponseBody fromJson(const std::string& json);

    /**
     * @brief 转换为JSON字符串
     */
    std::string toJson() const;
};

/**
 * @brief API请求Handler（示例实现）
 *
 * 用途：
 * - TraderManager接收TraderAPI发送的API请求
 * - 解析请求类型和参数
 * - 调用TraderEngine执行操作
 * - 将结果发送到replyStream
 */
class APIRequestHandler : public IMessageHandler {
public:
    /**
     * @brief 请求处理回调
     *
     * @param request 请求体
     * @param header 请求头
     * @return 响应体
     */
    using RequestCallback = std::function<APIResponseBody(const APIRequestBody& request,
                                                          const MessageHeader& header)>;

    APIRequestHandler() = default;
    APIRequestHandler(MessageProducerPtr producer, RequestCallback callback);

    /**
     * @brief 处理消息
     */
    int handleMessage(const Message& message) override;

    /**
     * @brief 获取支持的消息类型
     */
    std::string getMessageType() const override {
        return "APIRequest";
    }

    /**
     * @brief 获取Handler名称
     */
    std::string getName() const override {
        return "APIRequestHandler";
    }

    /**
     * @brief 设置回调函数
     */
    void setCallback(RequestCallback callback);

    /**
     * @brief 设置消息生产者（用于发送响应）
     */
    void setProducer(MessageProducerPtr producer);

private:
    MessageProducerPtr m_producer;
    RequestCallback m_callback;

    /**
     * @brief 发送响应
     */
    bool sendResponse(const MessageHeader& requestHeader, const APIResponseBody& response);

    /**
     * @brief 创建默认响应
     */
    static APIResponseBody createErrorResponse(int code, const std::string& message);
};

} // namespace MessageFramework
